using System;
using System.Collections.Generic;

namespace BasecampRestAPI
{
	public interface IProject
	{
		int Id { get; }
		string Name { get; }
		DateTime CreatedOn { get; }
		DateTime LastChangedOn { get; }
		string Announcement { get; }
		string Status { get; }
		string StartPage { get; }
		bool ShowWriteBoards { get; }
		bool ShowAnnouncement { get; }
		IPerson[] People { get; }
		IToDoList[] ToDoLists { get; }
		IMilestone[] Milestones { get; }
		IPost[] RecentMessages { get; }
		IPost[] ArchivedMessages { get; }

		IMilestone GetMilestoneById(int id);
		IMilestone CreateMilestone(string title, DateTime deadline, IPerson responsibleParty, bool notify);
		IToDoList CreateToDoList(string name, string description, IMilestone milestone,
			bool privateList, bool trackedList);
		ICategory[] GetCategoriesForType(CategoryType type);
		ICategory CreateCategory(CategoryType type, string name);
		IPost[] GetMessagesForCategory(ICategory category);
		IPost[] GetArchivedMessagesForCategory(ICategory category);
		IPost CreateMessage(ICategory category, string title, string body, string extendedBody, bool isPrivate,
			IEnumerable<IPerson> notifications, IEnumerable<IAttachment> attachments);
	}
}